//自己
class Solution {
public:
    //题目可转换为0不超过k个的最长字数组的长度
    int longestOnes(vector<int>& nums, int k) 
    {
        int n = nums.size(), zero=0, ret=0;
        for (int left=0,right=0; right < n; right++)//1. 进窗口    right越界说明没有满足的情况了，left再移动也没什么用， 所以结束
        {
            if (nums[right] == 0)  zero++;//1.1 更新zero ==0时++
            while (zero > k)//2. 判断是否满足条件
            {
                //3. 出窗口left++ 同时更新zero
                if (nums[left++] == 0) zero--;//==0时--
            }
            //4. 更新连续的个数(满足zero <= k时)
            ret = max(ret, right-left+1);
        }
        return ret;
    }
};  


//答案
class Solution {
public:
    //题目可转换为0不超过k个的最长字数组的长度
    int longestOnes(vector<int>& nums, int k) 
    {
        int ret=0;//定义在外面
        for (int left=0,right=0,zero=0; right < nums.size(); right++)//1. 进窗口    right越界说明没有满足的情况了，left再移动也没什么用， 所以结束
        {
            if (nums[right] == 0)  zero++;//1.1 更新zero ==0时++
            while (zero > k)//2. 判断是否满足条件
            {
                //3. 出窗口left++ 同时更新zero
                if (nums[left++] == 0) zero--;//==0时--
            }
            //4. 更新连续的个数(满足zero <= k时)
            ret = max(ret, right-left+1);
        }
        return ret;
    }
};  
//时间 O(N)
//空间 O(1)